package dao;

import hbt.HibernateUtil;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

import entidades.Ausencia;
import entidades.Obrero;
import entidades.Proyecto;


public class AusenciaDAO {
	
	private static AusenciaDAO instancia = null;
	private static SessionFactory sf = null;
	
	public static AusenciaDAO getInstancia(){
		if(instancia == null){
			sf = HibernateUtil.getSessionFactory();
			instancia = new AusenciaDAO();
		} 
		return instancia;
	}
	
	public void guardarUnaAusencia(Ausencia ausencia){
		Session session = sf.openSession();
		session.beginTransaction();
		session.saveOrUpdate(ausencia); 
		session.getTransaction().commit();
		session.close();
	}
	
	@SuppressWarnings("unchecked")
	public List<Ausencia> obtenerListaAusencias() throws Exception {
		try {
			Session session = sf.openSession();
			Query q = session.createQuery("from Ausencia");
			List<Ausencia> listaAusencias = new ArrayList<Ausencia>(q.list());
			session.close();
			return listaAusencias;
		} catch (Exception e) {
			throw e;
		}
	}

	@SuppressWarnings("unchecked")
	public int obtenerCantAusenciasSinJustificar(Obrero obreroSeleccionado, Proyecto proyectoSeleccionado) throws Exception {
		try {
			Session session = sf.openSession();
			Query q = session.createQuery("from Ausencia where JUSTIFICADA = 'N' and ID_OBRERO = "+obreroSeleccionado.getIdObrero()+" and ID_PROYECTO = "+proyectoSeleccionado.getIdProyecto());
			List<Ausencia> listaAusencias = new ArrayList<Ausencia>(q.list());
			session.close();
			return listaAusencias.size();
		} catch (Exception e) {
			throw e;
		}
	}
	
}
